package com.liuhaozzu.remoteprocess;

import java.lang.reflect.Method;

/**
 * JavaClass执行工具；
 */
public class JavaClassExecuter {
	/**
	 * 执行外部传过来的代表一个java类的Byte数组；
	 * 将输入类的byte数组中代表java.lang.System的CONSTANT_Utf8_info常量修改为劫持后的HackSystem类
	 * 执行方法为该类的static main(String[] args)方法，输出结果为该类的System.out/err输出信息。
	 * @param classByte 字节码文件数组
	 * @return
	 */
	public static String execute(byte[] classByte){
		HackSystem.clearBuffer();
		ClassModifier cm=new ClassModifier(classByte);
		//com.liuhaozzu.remoteprocess.HackSystem
		byte[] modiBytes=cm.modifyUTF8Constant("java/lang/System", "com/liuhaozzu/remoteprocess/HackSystem");
		HotSwapClassLoader loader=new HotSwapClassLoader();
		Class clazz=loader.loadByte(modiBytes);
		
		try {
			Method method=clazz.getMethod("main", new Class[]{String[].class});
			method.invoke(null, new String[]{null});
		} catch (Exception e) {
			e.printStackTrace();
		}
		return HackSystem.getBufferString();
		
	}
}
